﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ProjeTopeira
{
    public partial class frmJogo : Form
    {
        Dificuldade dificuldade;
        NossaImagem[] imagem;
        const int MAX = 16;
        int cont;
        int pontos;

        public frmJogo()
        {
            InitializeComponent();
            // dificuldade padrao intermediario (1)
            dificuldade = new Dificuldade(1);
            inicializaImagens();

        }

        private void pauseToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void opçõesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmOpcoes opcoes = new frmOpcoes(dificuldade);
        }

        private void novoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            inicializaJogo();
        }

        private void sairToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void inicializaImagens()
        { 
            imagem = new NossaImagem[MAX];

            for (int i = 0; i < MAX; i++) {
                imagem[i] = new NossaImagem();
                imagem[i].Estado = 1; // imagem da topeira
                imagem[i].Image = ProjeTopeira.Properties.Resources.reduzida;
                imagem[i].SizeMode = PictureBoxSizeMode.AutoSize;
                imagem[i].Click += new EventHandler(frmJogo_Click);
                //imagem[i].Padding.All = 5;

                tlpJogo.Controls.Add(imagem[i]);
            }
        }

        void frmJogo_Click(object sender, EventArgs e)
        {
            NossaImagem img = (NossaImagem)sender;
            if (img.Estado == 1 && cont < 60) // imagem da topeira
            {
                pontos = pontos + 1;
                img.Image = ProjeTopeira.Properties.Resources.buraco;
                img.Estado = 0;
                lblTextoPontos.Text = pontos.ToString();
            }
        }

        private void restauraBuracos()
        {
            for (int i = 0; i < MAX; i++)
            {
                imagem[i].Estado = 0; // imagem do buraco
                imagem[i].Image = ProjeTopeira.Properties.Resources.buraco;
            }
        }

        private void inicializaJogo()
        {
            restauraBuracos();

            cont = 0;
            pontos = 0;
            lblTextoPontos.Text = "0";
            pgbTempo.Value = 0;
            timerTopeiras.Enabled = true; 
        }

        private void timerTopeiras_Tick(object sender, EventArgs e)
        {
            Random rand = new Random();
            int aux;

            cont = cont + 1;
            if (pgbTempo.Value < pgbTempo.Maximum)
            {
                pgbTempo.Value = pgbTempo.Value + 1;
            }

            if (cont < 60)
            {
                if (cont % 3 == 0) // subida de topeiras a cada 3 segundos
                {
                    restauraBuracos();
                    // nível iniciante      2 topeiras
                    // nível intermediário  4 topeiras
                    // nível avançado       6 topeiras
                    for (int j = 0; j < (dificuldade.Nivel + 1) * 2; j++)
                    {
                        aux = rand.Next(16);
                        while (imagem[aux].Image == ProjeTopeira.Properties.Resources.reduzida)
                        {
                            aux = rand.Next(16);
                        }
                        imagem[aux].Image = ProjeTopeira.Properties.Resources.reduzida;
                        imagem[aux].Estado = 1; // imagem da topeira
                    }
                }
            }
            if (cont == 60)
            {
                MessageBox.Show("Fim de Jogo!\nPontuação: " + pontos);
                timerTopeiras.Enabled = !timerTopeiras.Enabled;
            }
        }

        private void sobreToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmSobre sobre = new frmSobre();
            sobre.Show();
        }
    }
}
